﻿#ifndef CLogHisDlg_H
#define CLogHisDlg_H
/********************************************************************************
** @ Date:2025/10/16
** @ Author: HanJiaXin
** @ Description:历史日志查询对话框
** @ Version:1.0.0
** @ ClassName:CLogHisDlg
** @ Fun:
********************************************************************************/
#include <QDialog>
#include <QStandardItemModel>
#include <QSharedPointer>
#include "ui_CLogHisDlg.h"
#include "Public.h"

class CLogHisDlg : public QDialog
{
	Q_OBJECT

public:
	CLogHisDlg(const QString& moduleName, const QVector<QString>& vecDeviceNames, int nType, QWidget *parent = nullptr);
	~CLogHisDlg();

private:
	void initConnect();                                 //初始化槽函数连接
	void initUI();										//初始化界面
	void initModel();									//初始化表格Model

	// 查询日志
	QVector<QSharedPointer<LogData>> queryLogs(const QString& date, const QString& keyword,
		const QString& deviceName, const QString& levelDesc);

	// 读取指定日期的日志文件(从文件末尾开始读)
	QVector<QSharedPointer<LogData>> CLogHisDlg::readLogFileFromEnd(const QString& filePath, const QString& moduleName,
		const QString& deviceName, const QString& keyword, int levelFilter) const;

	QVector<QSharedPointer<LogData>> CLogHisDlg::readLargeLogFile(QFile& file, const QString& filePath, const QString& moduleName,
		const QString& deviceName, const QString& keyword, int levelFilter) const;

	QVector<QSharedPointer<LogData>> CLogHisDlg::readSmallLogFile(QFile& file, const QString& filePath, const QString& moduleName,
		const QString& deviceName, const QString& keyword, int levelFilter) const;

	// 解析单行日志
	QSharedPointer<LogData> parseLogLine(const QString& line, const QString& moduleName,
		const QString& deviceName) const;

	// 显示当前页数据
	void showCurrentPage();

	// 更新页面信息显示
	void updatePageInfo();

	// 清空表格
	void clearTable();

public slots:
	void slotPushQuery();                               //点击查询按钮
	void slotPushPrePage();								//点击上一页
	void slotPushNextPage();							//点击上一页
	void slotPushAddDay();								//后一天
	void slotPushPreDay();								//前一天
	void slotDoubleClick();							    //双击表格

private:
	Ui::CLogHisDlgClass ui;
	QString m_sModuleName;//本控件显示的模块
	QVector<QString> m_vecDeviceNames;//本控件需要显示的设备
	int m_nType;           //0：m_vecDeviceNames中的设备 1:跳过m_vecDeviceNames的检查，全部都显示
	QStandardItemModel* m_pModel;
	int m_nMaxDisplayCount;//表格展示最大记录数
	int m_nNo;//序号

	// 分页相关
	QVector<QSharedPointer<LogData>> m_allLogs;  // 所有查询到的日志
	int m_currentPage;      // 当前页码
	int m_totalPages;       // 总页数
	int m_pageSize;         // 每页显示条数
};

#endif